package com.hspjava.Arrays_;

import java.util.Arrays;
import java.util.Comparator;

public class ArraysMethod01 {
    public static void main(String[] args) {
        Integer[] integers = {1,  39,  99};
        Arrays.sort(integers);
        System.out.println(Arrays.toString(integers));


        Integer[] arr = {1, -1, 4, 0, 89};
        //arr 是引用类型，可以通过sort排序 会直接影响到实参
        //sort重载的，也可以通过传入一个接口
        //定制排序 第一个参数是排序的数组， 第二个是实现compare方法的匿名内部类
        //2
        Arrays.sort(arr);
        System.out.println("===排序后===");
        System.out.println(Arrays.toString(arr));

        //体现了接口编程的方式

        // 源码
        //1.
        //TimSort.sort(a, 0, a.length, c, null, 0, 0);
        //2.
//        static <T> void sort(T[] a, int lo, int hi, Comparator<? super T> c,
//                T[] work, int workBase, int workLen        Arrays.sort(arr, new Comparator() {

        //3.执行到binarySort方法的代码,会根据动态绑定机制 c.compare()执行我们传入的
        //
//        while (left < right) {
//            int mid = (left + right) >>> 1;
//            if (c.compare(pivot, a[mid]) < 0)
//                right = mid;
//            else
//                left = mid + 1;
//        }
//
         //Arrays.sort(arr);//默认排序

        //4
        //new Comparator() {
        //    @Override
        //    public int compare(Object o1, Object o2) {
        //        return 0;
        //    }
        //}
        //5.
        //    public int compare(Object o1, Object o2)
        //  充分体现了匿名内部类和动态绑定机制


        Arrays.sort(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                return 0;
            }
        });

        System.out.println(Arrays.toString(arr));

    }
}
